*********************************
*                               *
* AFFICHAGE DU PAYSAGE MURYADEN *
*      (C)1989 BY DECKARD       *
*                               *
*********************************
*
                          ;
         ORG   $4000
                          ;
SPMVT    EQU   $1D2F      ; NBRE DE SPRITES EN MVT
SPM      EQU   $1D33      ; DEBUT STOCKAGE DES SPRITES EN MVT
SPMX     EQU   $1D97      ;  " "    "  "   COORD. X
SPMY     EQU   $1DFB      ;  " "    "  "   COORD. Y
MULT     EQU   $1B1B      ; MODULE MULTIPLICATION
SPRITED  EQU   $1AB6      ; &SPRITE DIRECT
CARTE2   EQU   $4F00      ; DATA CARTE (RENCONTRES)
CARTE1   EQU   $52C2      ; DATA CARTE (SPRITES)
CBT1     EQU   $540E      ; SPRITE BATEAU SUR CARTE SPRITE (DANS ILE)
CBT2     EQU   $5410      ;  " "     " "   "   " "   "  "  (HORS ILE)
COMPX    EQU   $08
COMPY    EQU   $19
CY       EQU   $17
CX       EQU   $18
X        EQU   $09
Y        EQU   $1A
CH       EQU   $24
CV       EQU   $25
WAIT     EQU   $FCA8
POSITION EQU   $FC22
                          ;
                          ; INITIALISATION
GAME0    JSR   RAZMVT     ; ANNULE LES SPRITES MOUVANTS ACTUELS
         LDA   #$01
         STA   X
         STA   Y          ; LAISSE UNE PLACE POUR LE CADRE
                          ;
         JSR   CALCOU?
                          ;
                          ; DETERMINE X0
                          ;
         SEC
         TXA
         SBC   #$C8       ; =200
         STA   X0+1
         STA   X0COP+1
         TYA
         SBC   #$00
         STA   X0+2
         STA   X0COP+2
                          ;
                          ; AFFICHAGE
                          ;
         LDA   #$00
         STA   COMPY
AFFIC1   LDA   #$00
         STA   COMPX
AFFIC2   LDX   COMPX
X0       LDA   $FFFF,X    ; LDA $????,X
         JSR   BROUILL    ; TEST BROUILLARD
                          ; TEST SI MOBILE OU NON
         CMP   #29        ; 1ER SPRITE MOBILE
         BPL   MVT1
         JMP   FIN_MVT
MVT1     CMP   #59        ; DERNIER SPRITE (JEU 1) MOBILE+1
         BMI   MVT2
         JMP   FIN_MVT
                          ; C'EST UN SPRITE MOBILE
MVT2     PHA              ; SAUVE NUMERO SPRITE
         JSR   MVTSTAT    ; SIGNALE LE SPRITE A AFFICHER
         PLA              ; RECUPERE NUMERO SPRITE POUR AFFICHAGE
                          ;
FIN_MVT  JSR   SPRITED    ; SPRITE DIRECT
         INC   COMPX
         LDX   COMPX
         CPX   #$05       ; ON REGARDE SI ON EST AU CENTRE
         BNE   PACENTRE
         LDY   COMPY
         CPY   #$05
         BNE   PACENTRE
                          ; ON EST AU CENTRE
         INC   COMPX
         LDA   #$0B
         STA   X
         STA   Y
CLASSE   LDA   #33        ; SPRITE BONHOMME
         JSR   SPRITED
         JMP   AFFIC3
                          ;
PACENTRE CPX   #$0B       ; EST-CE LA BORDURE DU CADRE?
         BEQ   NEXTL
                          ;
AFFIC3   INC   X          ; REPLACE POUR SPRITE SUIVANT
         INC   X
         DEC   Y
         JMP   AFFIC2
                          ;
NEXTL    INC   COMPY      ; PASSE A LA LIGNE DE SPRITES SUIVANTE
         LDY   COMPY
         CPY   #$0B       ; EST-CE LA BORDURE DU CADRE
         BEQ   FINCADRE
                          ;
         LDA   #$01
         STA   X          ; REPOSITIONNE POUR CADRE
         INC   Y          ; ON DESCEND DE 1
         CLC
         LDA   X0+1       ; POSITIONNEMENT SUR LA CARTE (+39)
         ADC   #$27       ; +39
         STA   X0+1
         STA   X0COP+1
         LDA   X0+2
         ADC   #$00       ; RETENUES
         STA   X0+2
         STA   X0COP+2
         JMP   AFFIC1     ; ON REFAIT 1 LIGNE DE SPRITES
                          ;
FINCADRE RTS
                          ;
                          ; TEST BROUILLARD
                          ;
BROUILL  BMI   OKBROUIL
         RTS              ; RETOUR CAR PAS DE BROUILLARD
                          ;
* ON VERIFIE QU'ON EST PAS DANS LA MINI FENETRE DU PERSO
                          ;
OKBROUIL JSR   TESTPOS
         BCS   NORM
         JMP   CBROUIL
NORM     LDX   COMPY
         JSR   TESTPOS
         BCS   NORM2
         JMP   CBROUIL
                          ;
NORM2    SBC   #$80       ; AFFICHE SPRITE NORMAL (ON ENLEVE $80)
         LDY   NATURE     ; REGARDE NATURE LIEU. SI DONJON, ON POKE
                          ; LA NOUVELLE VALEUR (DECOUVERTE)
         BNE   PADONJON   ; DONJON = 0
         LDX   COMPX
X0COP    STA   $FFFF,X    ; STA $????,X
PADONJON RTS
                          ;
                          ; BROUILLARD COMPLET
                          ;
CBROUIL  LDA   #16        ; SPRITE VIDE COMPLET
         RTS
                          ;
                          ;
                          ; TEST POSITION
                          ;
TESTPOS  CPX   #$04
         BPL   TESTPOS2   ; X>=4
         CLC
         RTS
                          ;
TESTPOS2 CPX   #$07
         BMI   TESTPOS3   ; X<7
         CLC
         RTS
TESTPOS3 SEC              ; ON EST DANS LA FENETRE
         RTS
                          ;
* SAUVE DONNEES POUR SPRITE MOUVANT
                          ;
MVTSTAT  LDX   SPMVT
         STA   SPM,X      ; SAUVE NUMERO SPRITE
         LDA   X
         STA   SPMX,X     ; SAUVE COORD. X
         LDA   Y
         STA   SPMY,X     ; SAUVE COORD. Y
         INC   SPMVT      ; 1 SPRITE MOUVANT EN PLUS
         RTS
                          ;
* CALCUL POSITION DU BONHOMME SUR LA CARTE DES SPRITES
                          ;
CALCOU?  LDA   CY         ; DETERMINE XP
         STA   $EC
         LDA   #39
         STA   $ED
         JSR   MULT       ; CY*39
                          ;
         CLC
         LDA   $EF        ; (-)
         ADC   CX
         TAX
         LDA   $EE        ; (+)
         ADC   #$00       ; RETENUES
         TAY
                          ;
                          ; +ADR DEBUT CARTE1 (SPRITES)
                          ;
         CLC
         TXA
         ADC   #<CARTE1
         TAX
         TYA
         ADC   #>CARTE1
         TAY
         RTS
                          ;
                          ;
*-------------------------------------------------
                          ;
                          ; MAIN PROG
                          ;
DECALAGE EQU   $17FA
CPTMUS   EQU   $19AD
SOUNDD   EQU   $19CF      ; SOUND DIRECT
MUSICD   EQU   $1992      ; MUSIC DIRECT
NOISED   EQU   $1A3D
AD1      EQU   $1A31
AD3      EQU   $1A33
RDKEY    EQU   $FD0C
OUTDO    EQU   $DB5C
STROUT   EQU   $DB3A
XCOPIE   EQU   $4C
YCOPIE   EQU   $4D
                          ;
START    LDA   CMD
         CMP   #2         ; COMBAT
         BNE   START2
                          ; ON ETAIT EN COMBAT
         DEC   SPMVT      ; ON AFFICHE PLUS LE SPRITE MONSTRE
         DEC   SPMVT      ; NOTRE PERSO REDEVIENT IMMOBILE
         JSR   GAME0      ; DEGAGE LA BESTIOLE DE L'ECRAN
         LDA   #0
         STA   CMD        ; ON EST PLUS EN MODE COMBAT
                          ;
         LDA   MBUTE      ; A-T-ON BUTER LE MONSTRE?
         CMP   #1
         BNE   START2
                          ; ON A TUE LE MONSTRE
         LDA   #0
         STA   MBUTE
                          ;
         LDA   PCOMB
         CMP   #100
         BNE   START2
                          ; C'ETAIT UN MONSTRE A 100%
         LDA   MONSTRE
         CMP   #1         ; CYCLOPE
         BEQ   GARDEPAS+1
         CMP   #10        ; MATRIARCHE
         BEQ   GARDEPAS+1
         CMP   #17        ; FAMILIER
         BEQ   GARDEPAS+1
         CMP   #16        ; LE NECROMANT
         BEQ   GARDEPAS+1
         LDY   MONSTRE    ; ON GARDE MONSTRE A 10%
GARDEPAS DFB   $2C        ; BIT
         LDY   #0         ; ON POKE 0 : PLUS DE MONSTRES ICI
         JSR   MNORMAL    ; ON MET UN NOUVEAU POURCENTAGE:10%
                          ;
START2   JSR   DECALAGE
         LDA   #$BE       ; AFFICHE '>'
         JSR   OUTDO
WAITKEY  JSR   RDKEY      ; ATTENTE TOUCHE
         CMP   #$95       ; DROITE
         BNE   MAIN1
                          ; FLECHE DROITE
         LDA   #<EST
         LDY   #>EST
         JSR   STROUT
         LDX   CX
         INX
MAIN0    STX   XCOPIE
         LDA   CY
         STA   YCOPIE
         JMP   AA
                          ;
MAIN1    CMP   #$88       ; OUEST
         BNE   MAIN2
                          ; FLECHE GAUCHE
         LDA   #<OUEST
         LDY   #>OUEST
         JSR   STROUT
         LDX   CX
         DEX
         JMP   MAIN0
                          ;
MAIN2    CMP   #$8B       ; NORD
         BNE   MAIN3
                          ; FLECHE HAUT
         LDA   #<NORD
         LDY   #>NORD
         JSR   STROUT
         LDY   CY
         DEY
MAIN00   STY   YCOPIE
         LDA   CX
         STA   XCOPIE
         JMP   AA
                          ;
MAIN3    CMP   #$8A       ; SUD
         BNE   MAIN4
                          ; FLECHE BAS
         LDA   #<SUD
         LDY   #>SUD
         JSR   STROUT
         LDY   CY
         INY
         JMP   MAIN00
                          ;
MAIN4    CMP   #$D0       ; 'P'
         BNE   MAIN5
         JMP   ENTRER
                          ;
MAIN5    CMP   #$D1       ; 'Q'
         BNE   MAIN6
         JMP   QUIT
                          ;
MAIN6    CMP   #$C9       ; 'I'
         BNE   MAIN7
         JMP   INVENTOR
                          ;
MAIN7    CMP   #$D5       ; 'U'
         BNE   MAIN8
         JMP   UTILISER
                          ;
MAIN8    CMP   #$CC       ; 'L'
         BNE   MAIN9
         JMP   SORT
                          ;
MAIN9    CMP   #$CA       ; 'J'
         BNE   MAIN10
         JMP   JETER
                          ;
MAIN10   CMP   #$C5       ; 'E'
         BNE   MAIN11
         JMP   EQUIPER
                          ;
MAIN11   CMP   #$CF       ; 'O'
         BNE   MAIN12
         JMP   OUVRIR
                          ;
MAIN12   CMP   #$CD       ; 'M'
         BNE   MAIN13
         JMP   BATEAU
                          ;
MAIN13   CMP   #$D3       ; 'S'
         BNE   MAIN14
         JMP   SAUVEJEU
                          ;
MAIN14   CMP   #$C3       ; 'C'
         BNE   MAIN?
         JMP   CHERCHER
                          ;
MAIN?    JMP   WAITKEY
                          ;
                          ;
                          ; CHERCHER
                          ;
CHERCHER LDA   #<SEEK
         LDY   #>SEEK
         JSR   STROUT
         JSR   HEREIS
         CMP   #200
         BMI   CHERCHE?   ; <200
         CMP   #204
         BPL   CHERCHE?   ; >203
                          ;
         SEC
         SBC   #199       ; NUMEROTES DE 1 A 4
         STA   DIVERS
                          ;
         PHA
         LDA   #<TROUVE
         LDY   #>TROUVE
         JSR   STROUT
         PLA
         TAX
         DEX
         BNE   CHERCHE2
                          ; CLEF
         LDA   #<CLEF
         LDY   #>CLEF
         JSR   STROUT
         JMP   FCHERCHE
                          ;
CHERCHE2 DEX
         BNE   CHERCHE3
                          ; PARCHEMIN
         LDA   #<SCROLL
         LDY   #>SCROLL
         JSR   STROUT
         JMP   FCHERCHE
                          ;
CHERCHE3 DEX
         BNE   CHERCHE4
                          ; MURYADEN
         LDA   #<MURYADEN
         LDY   #>MURYADEN
         JSR   STROUT
         JMP   FCHERCHE
                          ; PRINCESSE
CHERCHE4 LDA   #<PRINCESS
         LDY   #>PRINCESS
         JSR   STROUT
                          ;
FCHERCHE LDA   #12        ; CMD=CHERCHER
         JMP   GOBASIC
                          ;
CHERCHE? LDA   #<KEDAL
         LDY   #>KEDAL
         JSR   STROUT
         JMP   START
                          ;
                          ;
ENLEVOBJ LDA   #22
         JMP   ICISPRIT   ; ON MET LE SPRITE CADRE VIDE
                          ;
                          ;
                          ; SAUVEGARDE SCENARIO
                          ;
SAUVEJEU LDA   #<SAVEGAME
         LDY   #>SAVEGAME
         JSR   STROUT
         LDA   #11
         JMP   GOBASIC
                          ;
                          ; MONTER A BORD
                          ;
BATEAU   LDA   #<EMBARK
         LDY   #>EMBARK
         JSR   STROUT
         JSR   HEREIS
         CMP   #204
         BNE   BATEAU2
                          ; ON QUITTE L'ILE
         JSR   BATEAUP
         LDA   #29        ; SUR CARTE: MER REMPLACE BATEAU (DEPART ILE)
         STA   CBT1
         INC   CX
         JSR   BATEAUP3
         INC   CX
         JSR   BATEAUP3
         LDA   #32        ; SUR CARTE: BATEAU REMPLACE MER (DEPART ILE)
         STA   CBT2
         JMP   BATEAUP2
                          ;
BATEAU2  CMP   #205
         BNE   BATEAU?
                          ; ON VA DANS L'ILE
         JSR   BATEAUP
         LDA   #29        ; SUR CARTE: MER REMPLACE BATEAU (VA SUR ILE)
         STA   CBT2
         DEC   CX
         JSR   BATEAUP3
         DEC   CX
         JSR   BATEAUP3
         LDA   #32        ; SUR CARTE: BATEAU REMPLACE MER (VA SUR ILE)
         STA   CBT1
         JMP   BATEAUP2
                          ;
BATEAU?  JMP   ENTRER8    ; MONTER OU?
                          ;
BATEAUP  LDA   #<ABORD
         LDY   #>ABORD
         JSR   STROUT
         LDA   CLASSE+1
         STA   BATEAUP2+1
         LDA   #32
         STA   CLASSE+1   ; SPRITE BATEAU AU CENTRE DE L'ECRAN
         RTS
                          ;
BATEAUP2 LDA   #$00       ; LDA #$??
         STA   CLASSE+1   ; ON REMET LE SPRITE DU PERSO AU CENTRE
         JSR   GAME0
         JMP   START
                          ;
BATEAUP3
         JSR   RAZMVT
         JMP   GAME0      ; RTS INCLU
                          ;
                          ; OUVRIR
                          ;
OUVRIR   LDA   #<OPEN
         LDY   #>OPEN
         JSR   STROUT
         JSR   HEREIS
         BPL   OUVRE?     ; SI >0
         AND   #$7F       ; -$80
         CMP   #82
         BMI   OUVRE?     ; SI <210
         CMP   #91
         BPL   OUVRE?     ; SI >218
                          ;
         SEC
         SBC   #81        ; LES COFFRES SONT NUMEROTES DE 1 A 9
         STA   DIVERS
                          ;
         LDA   #<COFFRE
         LDY   #>COFFRE
         JSR   STROUT
         LDA   #10
         JMP   GOBASIC
                          ;
OUVRE?   JMP   QUIT4      ; OUVRIR QUOI?
                          ;
                          ;
COFFRVID LDA   #15        ; POKE COFFRE VIDE SUR CARTE1
         JMP   ICISPRIT
                          ;
                          ;
                          ; EQUIPER
                          ;
EQUIPER  LDA   #<EQUIP
         LDY   #>EQUIP
         JSR   STROUT
         LDA   #9
         JMP   GOBASIC
                          ;
                          ; JETER OBJET
                          ;
JETER    LDA   #<JETTE
         LDY   #>JETTE
         JSR   STROUT
         LDA   #8
         JMP   GOBASIC
                          ;
                          ; UTILISER OBJET
                          ;
UTILISER LDA   #<OBJET
         LDY   #>OBJET
         JSR   STROUT
         LDA   #6
         JMP   GOBASIC
                          ;
                          ; LANCER UN SORT
                          ;
SORT     LDA   #<SPELL
         LDY   #>SPELL
         JSR   STROUT
         LDA   #7
         JMP   GOBASIC
                          ;
INVENTOR LDA   #<INVEN
         LDY   #>INVEN
         JSR   STROUT
         LDA   #5
         JMP   GOBASIC
                          ;
                          ;
GOBASIC  STA   CMD
         JSR   DECALAGE
         RTS
                          ;
                          ; ENTRER
                          ;
ENTRER   LDA   #<ENTRE
         LDY   #>ENTRE
         JSR   STROUT
         JSR   HEREIS
         CMP   #240
         BNE   ENTRER1
                          ; BAR-TOLAINOR
         JSR   MDANS
         LDA   #<TOLAINOR
         LDY   #>TOLAINOR
         JSR   STROUT
         LDA   #2         ; VILLE 2
ENTRE0   LDX   #3         ; CMD = 3 (VILLES/CHATEAU/DONJON)
         STA   LIEU
         STX   CMD
         JSR   RAZMVT
         RTS
                          ;
ENTRER1  CMP   #241
         BNE   ENTRER2
                          ; BAR-CALENLAD
         JSR   MDANS
         LDA   #<CALENLAD
         LDY   #>CALENLAD
         JSR   STROUT
         LDA   #1         ; VILLE1
         JMP   ENTRE0
                          ;
ENTRER2  CMP   #242
         BNE   ENTRER3
                          ; ECHORKELIANT
         JSR   MDANS
         LDA   #<ECHORKEL
         LDY   #>ECHORKEL
         JSR   STROUT
         LDA   #3
         JMP   ENTRE0
                          ;
ENTRER3  CMP   #245
         BNE   ENTRER4
                          ; GONDARNOST
         JSR   MDANS
         LDA   #<GONDARNO
         LDY   #>GONDARNO
         JSR   STROUT
         LDA   #4
         JMP   ENTRE0
                          ;
ENTRER4  CMP   #250
         BNE   ENTRER5
                          ; DONJON CYCLOPE
         JSR   MDANS
         LDA   #<DONJON1
         LDY   #>DONJON1
         JSR   STROUT
         LDY   #32        ; POSITIONNEMENT
         LDX   #20
         LDA   #5
         JMP   ENTRER7
                          ;
ENTRER5  CMP   #251
         BNE   ENTRER6
                          ; DONJON MATRIARCHE
         JSR   MDANS
         LDA   #<DONJON2
         LDY   #>DONJON2
         JSR   STROUT
         LDY   #32        ; POSITIONNEMENT
         LDX   #18
         LDA   #6
         JMP   ENTRER7
                          ;
ENTRER6  CMP   #252
         BNE   ENTRER8
                          ; DONJON NECROMANT
         JSR   MDANS
         LDA   #<DONJON3
         LDY   #>DONJON3
         JSR   STROUT
         LDY   #32
         LDX   #19
         LDA   #7
         JMP   ENTRER7
                          ;
ENTRER7  PHA
         LDA   #0         ; DONJON
         STA   NATURE
         PLA
         STX   CX
         STY   CY
         JMP   ENTRE0
                          ;
                          ; PAS DE:VILLE/CHATEAU/DONJON
                          ;
ENTRER8  LDA   #<OU
         LDY   #>OU
         JSR   STROUT
         JMP   START
                          ;
MDANS    LDA   #<DANS
         LDY   #>DANS
         JSR   STROUT
         RTS
                          ;
                          ;
                          ; QUITTER DONJON
                          ;
QUIT     LDA   #<QUITTER
         LDY   #>QUITTER
         JSR   STROUT
         JSR   HEREIS
         CMP   #170
         BNE   QUIT2
                          ; QUITTER DONJON 1
         LDA   #4
         STA   NMAP       ; ON SORT SUR LA CARTE 4
         LDA   #24        ; CX
         PHA
         LDA   #14        ; CY
         PHA
QUIT0    LDA   #<DJN
         LDY   #>DJN
         JSR   STROUT
         PLA              ; RECUPERE COORDONNEES
         STA   CY
         PLA
         STA   CX
         LDA   #4
         STA   CMD
         LDA   #1
         STA   NATURE     ; ON SORT DONC: NATURE EXTERIEURE (=1)
         RTS
                          ;
QUIT2    CMP   #171
         BNE   QUIT3
                          ; QUITTER DONJON 2
         LDA   #2
         STA   NMAP       ; ON REVIENT SUR LA CARTE 2
         LDA   #30        ; CX
         PHA
         LDA   #24        ; CY
         PHA
         JMP   QUIT0
                          ;
QUIT3    CMP   #172
         BNE   QUIT4
                          ; QUITTER DONJON 3
         LDA   #3
         STA   NMAP       ; RETOUR SUR CARTE 3
         LDA   #18        ; CX
         PHA
         LDA   #7         ; CY
         PHA
         JMP   QUIT0
                          ;
                          ; QUITTER QUOI ??
                          ;
QUIT4    LDA   #<QUOI
         LDY   #>QUOI
         JSR   STROUT
         JMP   START
                          ;
HEREIS   LDA   CX
         STA   XCOPIE
         LDA   CY
         STA   YCOPIE
         JSR   ENLEVE
         STX   HEREIS2+1
         STY   HEREIS2+2
HEREIS2  LDX   $FFFF      ; LDA $???? CHARGE
         JSR   RETABLIR
         TXA              ; LE TYPE DE TERRIN EST DANS L'ACC
         RTS
                          ;
*-------------------------------------------------
                          ;
                          ; ON REGARDE LA NATURE DU LIEU OU ON ARRIVE
                          ;
AA       JSR   ENLEVE
b        LDA   $FFFF      ; LDA $????
         BNE   A1
                          ; AUCUN OBSTACLE
         JMP   B
                          ;
A1       CMP   #$FF       ; =255
         BNE   A2
                          ; SOLIDE
         LDA   #1         ; &MUSIC1,0,15
         STA   CPTMUS
         LDA   #0
         STA   $EC
         NOP
         LDX   #15
         JSR   MUSICD
                          ;
         JSR   DECALAGE
         LDA   #<IMPOSS
         LDY   #>IMPOSS
         JSR   STROUT     ; ?"IMPOSSIBLE"
         JMP   D
                          ;
A2       CMP   #$01
         BPL   A3
         JMP   COM
A3       CMP   #$79
         BMI   A4
         JMP   COM
                          ;
A4       STA   COPYLIEU
                          ;
                          ; DETERMINE NOMBRE ALEATOIRE
                          ;
         LDX   FLAG?
         BNE   ANNEX1
         LDA   $4E
         JMP   FLGOK
ANNEX1   DEX
         BNE   ANNEX2
         LDA   $4F
         JMP   FLGOK
ANNEX2   SEC
         LDA   $4E
         SBC   $4F
                          ;
FLGOK    TAX
         DEC   FLAG?
         LDA   FLAG?
         BPL   FLGOK2
         LDA   #2
         STA   FLAG?
FLGOK2   TXA
                          ;
                          ; NB ALEATOIRE COMPRIS ENTRE 0 ET 100
A6       BPL   A5         ; SI >=0
         AND   #$7F
A5       CMP   #$65       ; =101
         BMI   A7         ; SI <101 (DONC SI <=100)
         ROR   A
         CLC
         JMP   A6
                          ;
A7       STA   PROBA
         LDX   #$00
         LDA   COPYLIEU
A8       CMP   #31
         BMI   A9         ; SI <=30 ON A LE NUMERO DU MONSTRE
         SEC
         SBC   #30        ; -30
         INX
         JMP   A8
                          ;
A9       TAY
         SEC
         LDA   POURCENT,X
         STA   PCOMB      ; SAUVE CE POURCENTAGE
         SBC   PROBA
         BPL   CCOMB      ; COMBAT (PROBA<=POURCENTAGE)
                          ;
         JMP   A10        ; PAS DE COMBAT
                          ;
                          ; COMBAT
                          ; %TAGE>=PROBA ALEATOIRE
CCOMB    STY   MONSTRE
         TYA
         PHA              ; NUMERO MONSTRE
                          ; AFFICHE SPRITE MONSTRE
         LDA   SPCOMBAT-1,Y
         PHA              ; SAUVE LE SPRITE DU MONSTRE
         JSR   RETABLIR
         LDA   CX
         CMP   XCOPIE
         BNE   HORIZ      ; SOIT A GAUCHE SOIT A DROITE
                          ;
         LDA   #$0B
         STA   X
         LDA   CY         ; SOIT EN HAUT SOIT EN BAS
         CMP   YCOPIE
         BMI   ENBAS
                          ; MONSTRE EN HAUT
         LDA   #$09
         STA   Y
AFF_SP0  JMP   AFF_SP
                          ; MONSTRE EN BAS
ENBAS    LDA   #$0D
         JMP   AFF_SP0-2
                          ;
                          ;
HORIZ    LDX   #$0B
         STX   Y
         CMP   XCOPIE
         BMI   ADROITE
                          ; MONSTRE A GAUCHE
         LDA   #9
         STA   X
         JMP   AFF_SP
                          ;
ADROITE  LDA   #$0D
         STA   X
                          ; RETOUR BASIC
AFF_SP   PLA              ; RECUPERE LE SPRITE DU MONSTRE
         PHA
         JSR   MVTSTAT    ; AJOUTE SPRITE (FAIT AUSSI AFFICHAGE)
         PLA
         JSR   SPRITED
                          ; ON FAIT BOUGER NOTRE PERSO AU CENTRE
         LDA   #$0B
         STA   X
         STA   Y          ; COORDONNES MILIEU ECRAN
         LDA   CLASSE+1   ; NO SPRITE PERSO
         JSR   MVTSTAT    ; AJOUTE SPRITE
                          ;
         NOP
         NOP
         JSR   DECALAGE
         LDA   #<MCOMBAT
         LDY   #>MCOMBAT
         JSR   STROUT
         JSR   DECALAGE
                          ; DECLIC DEBUT COMBAT
SOUNDCB  LDY   #$10
         TYA
         JSR   WAIT
         BIT   $C030
         DEY
         BNE   SOUNDCB+2
                          ;
         PLA              ; RECUPERE NUMERO BESTIOLE
         TAY
         DEY              ; -1 POUR POINTER SUR TABLE
         TYA
         ASL   A          ; *2 POUR LA TABLE
         TAX
         LDA   MTABLE,X   ; HIGH
         TAY
         PHA              ; SAUVE HIGH
         INX
         LDA   MTABLE,X   ; LOW
         PHA              ; SAUVE LOW
         JSR   STROUT
         JSR   DECALAGE
                          ; AFFICHE NOM MONSTRE DANS LE CADRE HAUT
         LDX   #1
         LDY   #5
         JSR   WINDPOS
                          ;
         PLA              ; RECUPERE LOW
         TAX
         PLA              ; RECUPERE HIGH
         TAY
         TXA
         JSR   STROUT     ; AFFICHE NOM
                          ;
                          ; REPOSITIONNE DANS FENETRE BAS
         LDX   #0
         LDY   #23
         JSR   WINDPOS
                          ;
                          ;
         LDA   #$02       ; = COMBAT
         STA   CMD
         RTS
                          ;
WINDPOS  STX   CH
         STY   CV
         JSR   POSITION   POSITIONNE DANS FENETRE
         RTS
                          ;
                          ;
                          ;
A10      JMP   B          ; AUCUN OBSTACLE (DONC MOUVEMENT NORMAL)
                          ;
*
* SPRITES DES MONSTRES
*
                          ;
SPCOMBAT DFB   48,54,51,45,57,37,38,42,41,43,46,37,43,35,52
         DFB   35,39,55,58,53,40,43,51,56,34,47,36,44,49,50
                          ;
CYCLOPE  ASC              "Le cyclope"
         dfb   0
ETTIN    asc              "Un ettin"
         dfb   0
MANTICOR asc              "Une manticore"
         dfb   0
HARPIE   asc              "Une harpie"
         dfb   0
SAURE    ASC              "Un saure"
         dfb   0
ORQUE    asc              "Un orque"
         dfb   0
KOBOLD   asc              "Un kobold"
         dfb   0
SERPENT  asc              "Un serpent"
         dfb   0
RAT      asc              "Un rat"
         dfb   0
MATRIARC asc              "La Matriarche"
         dfb   0
CHAMANE  asc              "Un chamane"
         dfb   0
TROLL    asc              "Un troll"
         dfb   0
OGRE     asc              "Un ogre"
         dfb   0
MAGE     asc              "Un mage"
         dfb   0
DIABLE   asc              "Un diablotin"
         dfb   0
NECROMAN asc              "Le n{cromant"
         dfb   0
FAMILIER asc              "Le familier"
         dfb   0
XORN     asc              "Un xorn"
         dfb   0
DEMON    asc              "Un d{mon"
         dfb   0
SPECTRE  asc              "Un spectre"
         dfb   0
ZOMBIE   asc              "Un zombie"
         dfb   0
GOLEM    asc              "Un golem"
         dfb   0
WYRM     asc              "Un wyrm"
         dfb   0
BALROG   asc              "Un balrog"
         dfb   0
BANDIT   asc              "Un bandit"
         dfb   0
BARBARE  asc              "Un barbare"
         dfb   0
PRETRE   asc              "Un pr~tre"
         dfb   0
ARAIGNEE asc              "Une araign{e"
         dfb   0
MARCHAND asc              "Un marchand"
         dfb   0
MERCENAI asc              "Un mercenaire"
         dfb   0
MCOMBAT  ASC              "Une rencontre!  "
         DFB   0
                          ;
                          ;
                          ;
MTABLE   DFB   #>CYCLOPE,#<CYCLOPE
         DFB   #>ETTIN,#<ETTIN
         DFB   #>MANTICOR,#<MANTICOR
         DFB   #>HARPIE,#<HARPIE
         DFB   #>SAURE,#<SAURE
         DFB   #>ORQUE,#<ORQUE
         DFB   #>KOBOLD,#<KOBOLD
         DFB   #>SERPENT,#<SERPENT
         DFB   #>RAT,#<RAT
         DFB   #>MATRIARC,#<MATRIARC
         DFB   #>CHAMANE,#<CHAMANE
         DFB   #>TROLL,#<TROLL
         DFB   #>OGRE,#<OGRE
         DFB   #>MAGE,#<MAGE
         DFB   #>DIABLE,#<DIABLE
         DFB   #>NECROMAN,#<NECROMAN
         DFB   #>FAMILIER,#<FAMILIER
         DFB   #>XORN,#<XORN
         DFB   #>DEMON,#<DEMON
         DFB   #>SPECTRE,#<SPECTRE
         DFB   #>ZOMBIE,#<ZOMBIE
         DFB   #>GOLEM,#<GOLEM
         DFB   #>WYRM,#<WYRM
         DFB   #>BALROG,#<BALROG
         DFB   #>BANDIT,#<BANDIT
         DFB   #>BARBARE,#<BARBARE
         DFB   #>PRETRE,#<PRETRE
         DFB   #>ARAIGNEE,#<ARAIGNEE
         DFB   #>MARCHAND,#<MARCHAND
         DFB   #>MERCENAI,#<MERCENAI
                          ;
*-------------------------------------------------
                          ;
                          ;
EST      ASC   "Est"
         DFB   0
OUEST    ASC   "Ouest"
         DFB   0
NORD     ASC   "Nord"
         DFB   0
SUD      ASC   "Sud"
         DFB   0
IMPOSS   ASC              " IMPOSSIBLE !!"
         DFB   0
QUITTER  ASC              "Quitter "
         DFB   0
VOIR     ASC              "Vous voyez "
         DFB   0
ETRE     ASC              "Vous ~tes @ l'  entr{e d"
         DFB   0
OUIE     ASC              "Vous entendez:"
         DFB   0
SENTIR   ASC              "Vous sentez "
         DFB   0
TELEPORT ASC              "Vous franchissezun pentacle de  t{l{por"
         ASC              "tation !"
         dfb   0
ENTRE    ASC              "P{n{trer "
         dfb   0
OU       ASC              "o| ???"
         DFB   0
QUOI     ASC              "quoi ?"
         DFB   0
DANS     ASC              "dans: "
         DFB   0
DJN      ASC              "donjon"
         DFB   0
CALENLAD ASC              "  BAR-CALENLAD"
         DFB   0
TOLAINOR ASC              "  BAR-TOLAINOR"
         DFB   0
ECHORKEL ASC              "  ECHORKELIANT"
         DFB   0
GONDARNO ASC              "   GONDARNOST"
         DFB   0
DONJON1  ASC              "  ERED-MORGLIN"
         DFB   0
DONJON2  ASC              "   TEREGROTH"
         DFB   0
DONJON3  ASC              "  CORON RAUGUL"
         DFB   0
SPELL    ASC              "Lancer un sort"
         DFB   0
OBJET    ASC              "Utiliser objet"
         DFB   0
INVEN    ASC              "Inventaire"
         DFB   0
JETTE    ASC              "Jeter objet"
         DFB   0
EQUIP    ASC              "Equipement"
         DFB   0
OPEN     ASC              "Ouvrir "
         DFB   0
COFFRE   ASC              "coffre"
         DFB   0
EMBARK   ASC              "Monter "
         DFB   0
ABORD    ASC              "@ bord"
         DFB   0
SAVEGAME ASC              "Sauve le jeu"
         DFB   0
SEEK     ASC              "Chercher...    "
         dfb   0
KEDAL    ASC              "y-a peau d'Z{bi!"
         dfb   0
TROUVE   ASC              "Vous trouvez:   "
         DFB   0
CLEF     ASC              "Une clef"
         dfb   0
SCROLL   asc              "Un parchemin"
         dfb   0
MURYADEN asc              "MURYADEN !!"
         dfb   0
PRINCESS asc              "La princesse"
         dfb   0
                          ;
NATURE   DFB   1          ; NATURE DU LIEU (0=DONJON/1=EXTERIEUR)
NMAP     DFB   2          ; NO DE LA NOUVELLE CARTE (ICI CARTE 2)
OMAP     DFB   2          ; OLD MAP (SERT POUR LE &DEL)
MONSTRE  DFB   0
CMD      DFB   0
LIEU     DFB   0
COPYLIEU DFB   0
PROBA    DFB   0
POURCENT HEX   0A143264
PCOMB    DFB   0          ; POURCENTAGE DE PRESENCE DU MONSTRE
FLAG?    DFB   0
MBUTE    DFB   0          ; MONSTRE TUE=1/MONSTRE VIVANT=0
DIVERS   DFB   0
                          ;
*------------------------------------------
                          ;
                          ; CHARGE LE TYPE DE TERRAIN
                          ;
LDTERRIN LDA   YCOPIE
         STA   $EC
         LDA   #31        ; YCOPIE*31
         STA   $ED
         JSR   MULT
                          ; + XCOPIE
         CLC
         LDA   $EF
         ADC   XCOPIE
         TAX
         LDA   $EE
         ADC   #$00       ; RETENUE
         TAY
                          ; + DEBUT 1ERE CARTE
         CLC
         TXA
         ADC   #<CARTE2
         STA   b+1        ; LOW
         TAX
         TYA
         ADC   #>CARTE2
         STA   b+2        ; HIGH
         TAY
         RTS
                          ;
*---------------------------------------------
                          ;
                          ; MOUVEMENTS
                          ;
B        JSR   RAZMVT     ; ANNULE LES SPRITES MOUVANTS ACTUELS
         LDA   #1         ; &MUSIC1,1,5
         STA   CPTMUS
         LDA   #1
         STA   $EC
         NOP
         LDX   #15
         JSR   MUSICD
                          ;
COM?     DFB   $2C        ; BIT OU JSR
         DFB   #<F,#>F
         JSR   RETABLIR
                          ; TESTS DE SORTIE DE LA CARTE DES SPRITES
                          ;
                          ; TESTS DE X
         LDA   XCOPIE
         CMP   #$05
         BMI   B1         ; SI X<5 (TOUCHE <-)
         CMP   #$22
         BPL   B2         ; SI X>=34 (TOUCHE ->)
                          ;
                          ; TESTS DE Y
         LDA   YCOPIE
         CMP   #$05
         BMI   B3         ; SI Y<5 (FLECHE HAUT)
         CMP   #$22
         BPL   B4         ; SI Y>=34 (FLECHE BAS)
                          ;
         JMP   C          ; OK ON CONTINUE
                          ;
B1       LDA   #$21       ; ON CHANGE X, ON GARDE Y
         STA   CX         ; X=33
B0       LDA   #$01
         JSR   MAP        ; DETERMINE CARTE A CHARGER
         RTS
                          ;
B2       LDA   #$05       ; ON CHANGE X, ON GARDE Y
         STA   CX
         JMP   B0
                          ;
B3       LDA   #$21       ; ON GARDE X, ON CHANGE Y
         STA   CY
B00      LDA   #$00
         JSR   MAP
         RTS
                          ;
B4       LDA   #$05       ; ON GARDE X, ON CHANGE Y
         STA   CY
         JMP   B00
                          ;
                          ; TRANSFERT XCOPIE->X ET YCOPIE->Y
C        LDA   XCOPIE
         STA   CX
         LDA   YCOPIE
         STA   CY
         JSR   GAME0
                          ;
TELEP?   DFB   $2C        ; BIT
         DFB   #<TELE,#>TELE
                          ;
TRAP?    DFB   $2C        ; BIT
         DFB   #<PIEGE,#>PIEGE
                          ;
         JMP   START
                          ;
                          ;
RETABLIR LDA   XCOPIE
         CLC
         ADC   #$04
         STA   XCOPIE
         LDA   YCOPIE
         CLC
         ADC   #$04
         STA   YCOPIE
         RTS
                          ;
ENLEVE   LDA   XCOPIE
         SEC
         SBC   #$04
         STA   XCOPIE
         LDA   YCOPIE
         SEC
         SBC   #$04
         STA   YCOPIE
         JSR   LDTERRIN
         RTS
                          ;
D        JSR   RETABLIR
         JMP   START
                          ;
E        STA   CMD
         JSR   RETABLIR
         RTS
                          ;
                          ;
                          ; ENLEVE LE 100% DU MONSTRE
                          ;
MNORMAL0 LDY   #0         ; POUR LE CALL BASIC
MNORMAL  LDA   b+1
         STA   MNORMAL2+1
         LDA   b+2
         STA   MNORMAL2+2
MNORMAL2 STY   $FFFF      ; STY $????
         RTS
                          ;
                          ;
                          ; REMISE A ZERO DU NOMBRE DE SPRITES EN MVT
                          ;
RAZMVT   LDA   #0
         STA   SPMVT
         RTS
                          ;
                          ;
                          ; DETERMINE LA CARTE A LOADER
                          ;
MAP      BNE   MAP1
                          ; NORD OU SUD
         LDX   NMAP
         STX   OMAP       ; LA NEW MAP DEVIENT OLD MAP
         CPX   #$03
         BPL   MAP2       ; SI NO MAP>=3 (MAP=MAP-2)
                          ;
         INX              ; MAP=MAP+2
         INX
MAP0     STX   NMAP
         LDA   #$01       ; CHARGEMENT CARTE
         JMP   E
                          ;
MAP2     DEX              ; MAP=MAP-2
         DEX
         JMP   MAP0
                          ; EST OU OUEST
MAP1     LDX   NMAP
         STX   OMAP       ; LA NEW MAP DEVIEN OLD MAP
         CPX   #$02
         BNE   MAP3
                          ; MAP=MAP-1
MAP4     DEX
         JMP   MAP0
                          ;
MAP3     CPX   #$04
         BEQ   MAP4
                          ;
         INX
         JMP   MAP0
                          ;
                          ; LES COMMENTAIRES
                          ;
CETRE    EQU   $58B3
COUIE    EQU   $58B4
CSPECIAL EQU   $58B5
CSENTIR  EQU   $58B6
NBPAS    EQU   $58B7      ; NOMBRE DE PASSAGERS
TABLECOM EQU   $58C7      ; DEBUT DES ADR DE DEBUT DES COMMENTAIRES
                          ;
COM      CMP   #$8B
         BPL   COM2       ; SI LIEU>=139
         JMP   TELEP0
COM2     CMP   #$AA
         BMI   COM3       ; SI LIEU<170 (DONC SI LIEU<=169)
         JMP   TELEP0
                          ;
                          ; OK COMMENTAIRES
                          ;
COM3     STA   COPYLIEU   ; SAUVEGARDE LIEU
         LDA   #$20       ; REMPLACE LE BIT PAR LE JSR
         STA   COM?
         JMP   B
                          ;
                          ;
F        LDA   #$2C       ; REMET LE BIT A LA PLACE DU JSR
         STA   COM?
         JSR   DECALAGE
                          ; ON DETERMINE LE NUMERO DU COMMANTAIRE
         LDA   COPYLIEU
         SEC
         SBC   #$8B       ; -139 ( LE 1ER COMMENTAIRE A LE NB:0)
         STA   COPYLIEU
         PHA
                          ;
                          ; TESTS POUR DETERMINER LE DEBUT DU COM.
                          ;
         CMP   CSENTIR
         BMI   TESTCOM2   ; SI <ODEUR
         LDA   #<SENTIR
         LDY   #>SENTIR
                          ;
                          ;
                          ; PRINTCOM
TESTCOM0 JSR   STROUT
         PLA              ; RECUPERE LE NO DU COMMENTAIRE
         CLC
         ASL              ; ON MULTIPLIE PAR 2 PR POINTER L'ADR
         ADC   #<TABLECOM
         STA   $3C        ; LOW
         LDA   #>TABLECOM
         ADC   #$00
         STA   $3D        ; HIGH
                          ;
         LDY   #$00
         LDA   ($3C),Y    ; CHARGE ADR LOW
         TAX
         INY
         LDA   ($3C),Y    ; CHARGE ADR HIGH
         TAY
         TXA              ; RECUPERE ADR LOW
         JSR   STROUT
                          ;
                          ; SUITE DES COMMENTAIRES
         JSR   VERIFPAS   ; VERIFICATION SI PASSAGER
         RTS
                          ;
TESTCOM2 CMP   CSPECIAL
         BPL   TESTCOM0+3 ; SI >=SPECIAL (ON SAUTE LE JSR STROUT)
                          ;
         CMP   COUIE
         BMI   TESTCOM3   ; SI <SON
                          ;
                          ; SON
         LDA   #<OUIE
         LDY   #>OUIE
         JMP   TESTCOM0
                          ;
TESTCOM3 CMP   CETRE
         BMI   TESTCOM4   ; SI <ETRE
                          ;
                          ; ETRE
         LDA   #<ETRE
         LDY   #>ETRE
         JMP   TESTCOM0
                          ;
                          ; VOIR
TESTCOM4 LDA   #<VOIR
         LDY   #>VOIR
         JMP   TESTCOM0
                          ;
                          ; VERIFICATION S'IL Y A DES COM PASSAGERS
                          ;
VERIFPAS JSR   LDTERRIN
         STX   d+1        ; RECUPERATION ADR LOW
         STY   d+2        ; RECUPERATION ADR HIGH
                          ;
         LDA   NBPAS
         BNE   PAS1
FINPAS   RTS              ; PAS DE PASSAGERS
                          ;
PAS1     LDX   #$00
PAS2     LDA   NBPAS+1,X  ; NBPAS+1 = DEBUT DES PASSAGERS
         CMP   COPYLIEU
         BEQ   PAS3
                          ; CE N'EST PAS UN PASSAGER. SUIVANT?
         CPX   NBPAS
         BEQ   FINPAS
         INX
         JMP   PAS2       ; NEXT
                          ;
                          ; SI C'EST UN PASSAGER ON POKE 0
PAS3     LDA   #$00
d        STA   $FFFF      ; STA $????
         RTS
                          ;
                          ; TELEPORTATION
                          ;
TELEP0   CMP   #206
         BNE   TEL2
         LDA   #9         ; NOUVELLES VALEURS DE CY,CX
         PHA
         LDA   #21
         PHA
TELE00   LDA   #$4C       ; JMP
         STA   TELEP?
         JMP   B
                          ;
TELE     LDA   #$2C       ; RETABLI LE BIT
         STA   TELEP?
         JSR   DECALAGE
         LDA   #<TELEPORT
         LDY   #>TELEPORT
         JSR   STROUT     ; AFFICHE FRANCHISSEMENT
         JSR   SONTEL
         PLA              ; RECUPERE NOUVELLES COORDONNEES
         STA   CX
         PLA
         STA   CY
         JSR   GAME0
         JSR   SONTEL
         JMP   START
                          ;
TEL2     CMP   #207
         BNE   PIEGER
         LDA   #6         ; NOUVELLES VALEURS DE CY,CX
         PHA
         LDA   #16
         PHA
         JMP   TELE00
                          ;
                          ;
SONTEL   LDA   #200       ; SON TELEPORTATION (&SOUND200,10)
         STA   AD1
         LDA   #20
         STA   AD3
         JMP   SOUNDD
         RTS
                          ;
                          ;
PIEGER   TAY              ; SAUVE ACC
         AND   #$7F       ; -$80
         CMP   #62
         BMI   PORTECLE
         CMP   #68
         BPL   PORTECLE
                          ; ON TOMBE DANS UN PIEGE
         SEC
         SBC   #61        ; RECUPERE LE NUMERO DU PIEGE
         STA   DIVERS
         LDA   #$4C       ; JMP
         STA   TRAP?
         JMP   B
                          ;
                          ; POINT D'ARRIVEE DE PIEGE
                          ;
PIEGE    LDA   #$2C
         STA   TRAP?      ; RETABLIT LE BIT
         LDA   #13        ; CMD=PIEGE
         JMP   GOBASIC
                          ;
                          ;
                          ; PORTE MATRIARCHE FERMEE A CLEF
                          ;
PORTECLE TYA
         CMP   #189
         BNE   AUTRLIEU
         LDA   #14
         JMP   GOBASIC
                          ;
OPENDOOR DEC   CY         ; ON PASSE PAR LA PORTE
         JSR   GAME0
REMPLAS0 LDY   #0
         JSR   MNORMAL
         RTS
                          ;
                          ;
                          ;
AUTRLIEU JMP   B          ;
                          ;
                          ;
                          ;
* ECRIT UN NOUVEAU SPRITE SUR LA CARTE1 A
* L'ENDROIT OU ON EST
                          ;
ICISPRIT PHA              ; MET DE COTE LA VALEUR A POKER
         JSR   CALCOU?
         STX   ICISP2+1
         STY   ICISP2+2
         PLA              ; RECUPERE LA VALEUR
ICISP2   STA   $FFFF      ; STA $????
         JSR   REMPLAS0   ; ET ON POKE 0 SUR CARTE2
         RTS
                          ;
         SAV   GAME
